<?
// в этом классе собраны редко используемые
// утилитарные функции общего назначения
class Misc
{
	function getBrowserVersion()
	{
	    $browsers = array("firefox", "msie", "opera", "chrome", "safari"  );
			
	    $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
	    foreach($browsers as $browser)
	    {
	        if (preg_match("#($browser)[/ ]?([0-9.]*)#", $agent, $match))
	        {
						if($match[1]=='msie') $match[1]='ie';
						if($match[1]=='opera')
						{
							if($match[2]>=9.8 && $match[2]<10) 
							{
								// в этом случае номер записан иначе
								// Opera/9.80 (Macintosh; Intel Mac OS X; U; en) Presto/2.2.15 Version/10.00
								// см. http://dev.opera.com/articles/view/opera-ua-string-changes/
								if(preg_match("#(version)[/ ]?([0-9.]*)#", $agent, $operamatch))
								{
									$match[2] = $operamatch[2];
								}
								else
								{
									$match[2] = 10;
								}
							}
						}
						// для ФФ нам важно знать не только первое число до точки, но и второе...
						if($match[1]=='firefox')
						{
							$match[2] = substr($match[2],0,3); // Y3K :)
						}
						else
						{
							$match[2] = floor($match[2]);
						}
						return $match[1].' '.$match[2];
	        }
	    }
			
			return 'other';
	}
	
	
	
	// разделение массива на несколько частей, по-возможности равных
	// например для отображения списка в 3 колонки
	function array_split($array,$parts)
	{
		$ret = Array();
		for($i=0;$i<$parts;$i++) $ret[$i]=Array();
		
		$count = sizeof($array);
		if(!$count) return $ret;
		
		$chunk = floor($count / $parts);
		$total = $chunk * $parts;
		
		$chunks = Array();
		for($i=0;$i<$parts;$i++) $chunks[$i]=$chunk;
		for($i=0;$i<$parts;$i++) 
			if($total<$count) 
			{
				$chunks[$i]++;
				$total++;
			}
		
		$temparray = Array();
		foreach($array as $item)
		{
			$temparray[] = $item;
		}
		$array = $temparray;
		
		$pointer=0;
		$sum=0;
		for($i=0;$i<$count;$i++) 
		{
			$ret[$pointer][]=$array[$i];
			$sum++;
			if($sum>=$chunks[$pointer]) 
			{
				$sum=0;
				$pointer++;
			}
		}
		return $ret;
	}
	
	
	function isExternalRef()
	{
		if($_SERVER['HTTP_REFERER']=='') return false;
		return Misc::isExternalUrl($_SERVER['HTTP_REFERER']);
	}
	
	
	function isExternalUrl($url)
	{
		$ref = strtolower($url);
		if( instr($ref, 'http://') )  $ref = substr($ref,7);
		if( instr($ref, 'https://') ) $ref = substr($ref,8);
		if( instr($ref, '/') )        $ref = substr($ref,0,strpos($ref,'/'));
		$count = substr_count($ref,'.');
		if($count>=2) $ref = substr($ref,strpos($ref,'.')+1);
		if($ref!=HOST_NAME_SHORT) return true;
		return false;
	}
	
	
	function generatePassword($len = 8)
	{
		$arr = array(
						'a','b','c','d','e','f',
						'g','h','i','j','k',
						'm','n','p','r','s',
						't','u','v','x','y','z',
						'A','B','C','D','E','F',
						'G','H','J','K','L',
						'M','N','P','R','S',
						'T','U','V','X','Y','Z',
						'2','3','4','5','6',
						'7','8','9');
		$pass = "";
		for($i = 0; $i < $len; $i++)
		{
			$index = rand(0, count($arr) - 1);
			$pass .= $arr[$index];
		}
		return $pass;
	}
	
	
	
	static function hasRus($str)
	{
		$str = strtolower($str);
		$arr = Array('а','б','в','г','д','е','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');
		$len = strlen($str);
		for($i=0;$i<$len;$i++)
		{
			if(in_array(substr($str,$i,1),$arr)) return true;
		}
		return false;
	}
	
	static function hasLatin($str)
	{
		$str = strtolower($str);
		$arr = Array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
		$len = strlen($str);
		for($i=0;$i<$len;$i++)
		{
			if(in_array(substr($str,$i,1),$arr)) return true;
		}
		return false;
	}
	
	
	
	
	static function getCCode($regionid)
	{
		foreach($GLOBALS['allregions'] as $r)
		{
			if($r['id']==$regionid) return $r['ccode'];
		}
	}
	
	
	
	static function numHash($str)
	{
		$str = str_replace('a','1',$str);
		$str = str_replace('b','2',$str);
		$str = str_replace('c','3',$str);
		$str = str_replace('d','4',$str);
		$str = str_replace('e','5',$str);
		$str = str_replace('f','6',$str);
		$str = str_replace('0','7',$str);
		return $str;
	}
	
	
}